home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earkit / socket / miami3 / miamisdk / netinclude / net / route.h < prev   
C/C++ Source or Header  |  1998-05-24  |  8KB  |  210 lines

  1. #ifndef _NET_ROUTE_H_
  2. #define _NET_ROUTE_H_
  3.  
  4. #ifndef _SYS_TYPES_H_
  5. #include <sys/types.h>
  6. #endif
  7.  
  8. #ifndef _SYS_SOCKET_H_
  9. #include <sys/socket.h>
  10. #endif
  11.  
  12. #ifndef _NET_RADIX_H_
  13. #include <net/radix.h>
  14. #endif
  15.  
  16. /*
  17.  * A route consists of a destination address and a reference
  18.  * to a routing entry.  These are often held by protocols
  19.  * in their control blocks, e.g. inpcb.
  20.  */
  21. struct route {
  22.     struct    rtentry *ro_rt;
  23.     struct    sockaddr ro_dst;
  24. };
  25.  
  26. /*
  27.  * These numbers are used by reliable protocols for determining
  28.  * retransmission behavior and are included in the routing structure.
  29.  */
  30. struct rt_metrics {
  31.     u_long    rmx_locks;    /* Kernel must leave these values alone */
  32.     u_long    rmx_mtu;    /* MTU for this path */
  33.     u_long    rmx_hopcount;    /* max hops expected */
  34.     u_long    rmx_expire;    /* lifetime for route, e.g. redirect */
  35.     u_long    rmx_recvpipe;    /* inbound delay-bandwith product */
  36.     u_long    rmx_sendpipe;    /* outbound delay-bandwith product */
  37.     u_long    rmx_ssthresh;    /* outbound gateway buffer limit */
  38.     u_long    rmx_rtt;    /* estimated round trip time */
  39.     u_long    rmx_rttvar;    /* estimated rtt variance */
  40.     u_long    rmx_pksent;    /* packets sent using this route */
  41.     u_long    rmx_filler[4];    /* will be used for T/TCP later */
  42. };
  43.  
  44. /*
  45.  * rmx_rtt and rmx_rttvar are stored as microseconds;
  46.  * RTTTOPRHZ(rtt) converts to a value suitable for use
  47.  * by a protocol slowtimo counter.
  48.  */
  49. #define    RTM_RTTUNIT    1000000    /* units for rtt, rttvar, as units per sec */
  50. #define    RTTTOPRHZ(r)    ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
  51.  
  52. /*
  53.  * We distinguish between routes to hosts and routes to networks,
  54.  * preferring the former if available.  For each route we infer
  55.  * the interface to use from the gateway address supplied when
  56.  * the route was entered.  Routes that forward packets through
  57.  * gateways are marked so that the output routines know to address the
  58.  * gateway rather than the ultimate destination.
  59.  */
  60.  
  61. struct rtentry {
  62.     struct    radix_node rt_nodes[2];    /* tree glue, and other values */
  63. #define    rt_key(r)    ((struct sockaddr *)((r)->rt_nodes->rn_key))
  64. #define    rt_mask(r)    ((struct sockaddr *)((r)->rt_nodes->rn_mask))
  65.     struct    sockaddr *rt_gateway;    /* value */
  66.     short    rt_filler;        /* was short flags field */
  67.     short    rt_refcnt;        /* # held references */
  68.     u_long    rt_flags;        /* up/down?, host/net */
  69.     u_long    rt_use;            /* raw # packets forwarded */
  70.     struct    ifnet *rt_ifp;        /* the answer: interface to use */
  71.     struct    ifaddr *rt_ifa;        /* the answer: interface to use */
  72.     struct    sockaddr *rt_genmask;    /* for generation of cloned routes */
  73.     caddr_t    rt_llinfo;        /* pointer to link level info cache */
  74.     struct    rt_metrics rt_rmx;    /* metrics used by rx'ing protocols */
  75.     struct    rtentry *rt_gwroute;    /* implied entry for gatewayed routes */
  76.     long    (*rt_output)(struct rtentry *,struct mbuf *,
  77.             struct sockaddr *,long);
  78.                     /* output routine for this (rt,if) */
  79.     struct    rtentry *rt_parent;     /* cloning parent of this route */
  80.     void    *rt_filler2;        /* more filler */
  81. };
  82.  
  83. /*
  84.  * Following structure necessary for 4.3 compatibility;
  85.  * We should eventually move it to a compat file.
  86.  */
  87. struct ortentry {
  88.     u_long    rt_hash;        /* to speed lookups */
  89.     struct    sockaddr rt_dst;    /* key */
  90.     struct    sockaddr rt_gateway;    /* value */
  91.     short    rt_flags;        /* up/down?, host/net */
  92.     short    rt_refcnt;        /* # held references */
  93.     u_long    rt_use;            /* raw # packets forwarded */
  94.     struct    ifnet *rt_ifp;        /* the answer: interface to use */
  95. };
  96.  
  97. #define    RTF_UP        0x1        /* route usable */
  98. #define    RTF_GATEWAY    0x2        /* destination is a gateway */
  99. #define    RTF_HOST    0x4        /* host entry (net otherwise) */
  100. #define    RTF_REJECT    0x8        /* host or net unreachable */
  101. #define    RTF_DYNAMIC    0x10        /* created dynamically (by redirect) */
  102. #define    RTF_MODIFIED    0x20        /* modified dynamically (by redirect) */
  103. #define RTF_DONE    0x40        /* message confirmed */
  104. #define RTF_MASK    0x80        /* subnet mask present */
  105. #define RTF_CLONING    0x100        /* generate new routes on use */
  106. #define RTF_XRESOLVE    0x200        /* external daemon resolves name */
  107. #define RTF_LLINFO    0x400        /* generated by ARP or ESIS */
  108. #define RTF_STATIC    0x800        /* manually added */
  109. #define RTF_BLACKHOLE    0x1000        /* just discard pkts (during updates) */
  110. #define RTF_PROTO2    0x4000        /* protocol specific routing flag */
  111. #define RTF_PROTO1    0x8000        /* protocol specific routing flag */
  112. #define RTF_PRCLONING    0x10000        /* protocol requires cloning */
  113. #define RTF_WASCLONED    0x20000        /* route generated through cloning */
  114. #define RTF_PROTO3    0x40000        /* protocol specific routing flag */
  115. #define RTF_PINNED    0x100000    /* future use */
  116.  
  117. /*
  118.  * Routing statistics.
  119.  */
  120. struct    rtstat {
  121.     short    rts_badredirect;    /* bogus redirect calls */
  122.     short    rts_dynamic;        /* routes created by redirects */
  123.     short    rts_newgateway;        /* routes modified by redirects */
  124.     short    rts_unreach;        /* lookups which failed */
  125.     short    rts_wildcard;        /* lookups satisfied by a wildcard */
  126. };
  127. /*
  128.  * Structures for routing messages.
  129.  */
  130. struct rt_msghdr {
  131.     u_short    rtm_msglen;    /* to skip over non-understood messages */
  132.     u_char    rtm_version;    /* future binary compatibility */
  133.     u_char    rtm_type;    /* message type */
  134.     u_short    rtm_index;    /* index for associated ifp */
  135.     u_short rtm_pad1;    /* force natural alignment */
  136.     long rtm_flags;    /* flags, incl. kern & message, e.g. DONE */
  137.     long rtm_addrs;    /* bitmask identifying sockaddrs in msg */
  138.     void *rtm_pid;    /* identify sender */
  139.     long rtm_seq;    /* for sender to identify action */
  140.     long rtm_errno;    /* why failed */
  141.     long rtm_use;    /* from rtentry */
  142.     u_long    rtm_inits;    /* which metrics we are initializing */
  143.     struct    rt_metrics rtm_rmx; /* metrics themselves */
  144. };
  145.  
  146. #define RTM_VERSION    4    /* Up the ante and ignore older versions */
  147.  
  148. #define RTM_ADD        0x1    /* Add Route */
  149. #define RTM_DELETE    0x2    /* Delete Route */
  150. #define RTM_CHANGE    0x3    /* Change Metrics or flags */
  151. #define RTM_GET        0x4    /* Report Metrics */
  152. #define RTM_LOSING    0x5    /* Kernel Suspects Partitioning */
  153. #define RTM_REDIRECT    0x6    /* Told to use different route */
  154. #define RTM_MISS    0x7    /* Lookup failed on this address */
  155. #define RTM_LOCK    0x8    /* fix specified metrics */
  156. #define RTM_OLDADD    0x9    /* caused by SIOCADDRT */
  157. #define RTM_OLDDEL    0xa    /* caused by SIOCDELRT */
  158. #define RTM_RESOLVE    0xb    /* req to resolve dst to LL addr */
  159. #define RTM_NEWADDR    0xc    /* address being added to iface */
  160. #define RTM_DELADDR    0xd    /* address being removed from iface */
  161. #define RTM_IFINFO    0xe    /* iface going up/down etc. */
  162.  
  163. #define RTV_MTU        0x1    /* init or lock _mtu */
  164. #define RTV_HOPCOUNT    0x2    /* init or lock _hopcount */
  165. #define RTV_EXPIRE    0x4    /* init or lock _hopcount */
  166. #define RTV_RPIPE    0x8    /* init or lock _recvpipe */
  167. #define RTV_SPIPE    0x10    /* init or lock _sendpipe */
  168. #define RTV_SSTHRESH    0x20    /* init or lock _ssthresh */
  169. #define RTV_RTT        0x40    /* init or lock _rtt */
  170. #define RTV_RTTVAR    0x80    /* init or lock _rttvar */
  171.  
  172. /*
  173.  * Bitmask values for rtm_addr.
  174.  */
  175. #define RTA_DST        0x1    /* destination sockaddr present */
  176. #define RTA_GATEWAY    0x2    /* gateway sockaddr present */
  177. #define RTA_NETMASK    0x4    /* netmask sockaddr present */
  178. #define RTA_GENMASK    0x8    /* cloning mask sockaddr present */
  179. #define RTA_IFP        0x10    /* interface name sockaddr present */
  180. #define RTA_IFA        0x20    /* interface addr sockaddr present */
  181. #define RTA_AUTHOR    0x40    /* sockaddr for author of redirect */
  182. #define RTA_BRD        0x80    /* for NEWADDR, broadcast or p-p dest addr */
  183.  
  184. /*
  185.  * Index offsets for sockaddr array for alternate internal encoding.
  186.  */
  187. #define RTAX_DST    0    /* destination sockaddr present */
  188. #define RTAX_GATEWAY    1    /* gateway sockaddr present */
  189. #define RTAX_NETMASK    2    /* netmask sockaddr present */
  190. #define RTAX_GENMASK    3    /* cloning mask sockaddr present */
  191. #define RTAX_IFP    4    /* interface name sockaddr present */
  192. #define RTAX_IFA    5    /* interface addr sockaddr present */
  193. #define RTAX_AUTHOR    6    /* sockaddr for author of redirect */
  194. #define RTAX_BRD    7    /* for NEWADDR, broadcast or p-p dest addr */
  195. #define RTAX_MAX    8    /* size of array to allocate */
  196.  
  197. struct rt_addrinfo {
  198.     long    rti_addrs;
  199.     struct    sockaddr *rti_info[RTAX_MAX];
  200. };
  201.  
  202. struct route_cb {
  203.     long    ip_count;
  204.     long    ns_count;
  205.     long    iso_count;
  206.     long    any_count;
  207. };
  208.  
  209. #endif
  210.